DIRECCIONAMIENTO
POR NOMBRE

Nomen is numen” (Nombrar es conocer. Dicho latino)

“Vivimos en un universo de nombrables” (Gregory Bateson)

“Nombrar es tener individualidad” (Nikolái Luzin)

“Cuando nombro un objeto con una palabra afirmo su existencia” (Andréi Bely)



Dirección vs. nombre

En la arquitectura clásica von Neumann de los ordenadores, cada celda de memoria tiene dos atributos fundamentales: su dirección y su valor (o contenido). En MENTAL no hay direcciones, hay nombres, porque la dirección es un concepto implementador. En MENTAL se diluye la distinción entre nombres (que representan direcciones) y datos. Ambos son expresiones. Por ejemplo, El nombre n hace referencoia al contenido de n, o el valor asociado a n.

La expresión de sumar 1 a n se interpreta como: "el contenido de n es igual contenido de n más uno". No se interpreta como (7 = 7+1). En este caso, el nuevo valor de n es 8.

En un valor, por ejemplo, 13, confluyen el nombre y el valor.

Los nombres se evalúan automáticamente. Un tipo de evaluación es la autoevaluación, que se puede forzar mediante la primitiva “no evaluación”. Un caso típico es, por ejemplo,

(n = 7)
(n° = n + 1)
// sumar 1 a n

La primera n no se evalúa (se autoevalúa), la segunda sí se evalúa. En este caso, las expresiones (n° = n + 1) y (n = n+1) son equivalentes.

En MENTAL:
Direccionamiento en secuencias

En el caso de que tengamos una secuencia x y queramos sustituir el contenido del segundo componente de x, se utiliza la expresión x\2 a la izquierda del signo "=". Por ejemplo,

(x = (a b c d)) // definición de la secuencia

(x\2 = 123) // actualización del segundo componente de la secuencia
x // ev. (a 123 c d)


En el caso de que el número de orden del componente sea variable, la técnica es la misma.Por ejemplo,

(s = (a b c d)) // definición secuencia
(n = 2)

(s\n = 123) // actualización del segundo componente de la secuencia
s // ev. (a 123 c d)


En este caso, (s\n = 123) y ((s\n)° = 123) no son equivalentes.

Si utilizamos (x\2)° a la derecha del signo =, nos estamos refiriendo a x\2, pero en diferido. Por ejemplo,

(x = (a b c (x\2)° d)
x // ev. (a b c x\2 d)
x // ev. (a b c b d)



Direccionamiento de expresiones cerradas (secuencias y conjuntos)

Si tenemos una expresión cerrada, por ejemplo, (x = (a b c)), entonces: Ejemplos:
  1. x = (a b c)
    x↓
    // ev. a b c (expresión abierta)
    (x↓= u+v) // sustituir el contenido de x por u+v
    x // ev. u+v

  2. (x = {a b c})
    (x↓ = θ)
    // eliminar el contenido de x
    x // ev. {θ} ev. {} (conjunto vacío)

  3. (x = (a b c))
    (x↓ = θ)
    // eliminar el contenido de x
    x // ev. (θ) ev. () (secuencia vacía)

  4. (y = (u v))
    (x = (a b (y↓)° c))
    x // ev. (a b y↓ c)
    x // ev. (a b u v c)

Parámetros de nombres y valores

Los parámetros pueden ser de tres tipos: de entrada, de salida o de entrada/salida. Ejemplos:
  1. ⟨( f(x y) = x+y )⟩

    Esta es la definición de una función, por lo que devuelve un resultado. Los parámetros son de entrada, pero pueden ser expresiones de cualquier tipo, pues no se imponen restricciones.

    f(3 4) // ev. 7
    f(a b) // ev. a+b
    (a = 3) (b = "abc")
    f(a b) // ev. 3+"abc"
    f(ab cd) // ev. ab+cd


  2. En una secuencia, sustituir los números mayores que n por n.

    En este caso tenemos un parámetro de entrada/salida(x, la secuencia), y un parámetro de entrada (el número n de referencia).

    ⟨( sust(x n) = ([(x\i > n)→(x(i) = n)/(i=[1…(x#))]))] )⟩
    (x = (4 7 6 5 2))
    sust(x 5) // se pasa como parámetro el nombre de la secuencia
    x // ev. (4 5 5 5 2)

Subíndices

En los lenguajes tradicionales es corriente tener expresiones del tipo x(i) = valor, en donde i es un número natural (subíndice). En MENTAL, x(i) se interpretaría como la secuencia (x i), no como la dirección del elemento i de x. Los subíndices en MENTAL se pueden representar mediante una particularización cualitativa por un número natural. Por ejemplo, x/3, que equivale a x3.